<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

</body>
<script>
    function fn(a,b,c,d){
        // "use strict";
        console.log(this,a,b,c,d);
    }
    const run = ()=>{
        console.log(this);
    }
    // **call 、bind 、 apply 传参情况**
    // * call 的参数是直接放进去的，第二第三第 n 个参数全都用逗号分隔，直接放到后面
    // run.call({});// call 无法更改箭头函数中的this
    // fn.call(undefined);// window, 开启严格模式那么指向的是undefined
    // fn.call(null);// window, 开启严格模式那么指向的是null
    // fn.call(1);// number包装对象
    // fn.call("abc");// string包装对象
    // fn.call({});// {}
    // fn.call([]);// []
    // fn.call(function(){});// function(){}
    // fn.call({},1,2,3,4);// {} 1 2 3 4

    // * apply 的所有参数都必须放在一个数组里面传进去
    // fn.apply({},[1,2,3,4]);
    // *bind 除了返回是函数以外，它的参数和 call 一样 (bind只会返回函数而不会调用函数)
    // fn.bind({},1,2,3,4)();// 相当于  fn.call({},1,2,3,4)   [] 1 2 3 4
    // fn.bind([],1)(2,3,4);// [] 1 2 3 4
    const fn2 = fn.bind([],100);// 返回函数中的this为[],接收参数100
    fn2(1,2,3);// [] 100 1 2 3
    fn2(10,20,30);// [] 100 10,20,30
    fn2(100,200,300);// [] 100 100,200,300
    fn2(1000,2000,3000);// [] 100 1000,2000,3000

</script>
</html>